{ "cells": [ { "cell_type": "markdown", "id": "9eb9e550-9cd8-4949-8f2e-04cf63deea5b", "metadata": {}, "source": [ "## Monte Carlo f-Average Integration\n", " - April 5, 2024\n", "\n", "This tutorial will numerically evaluate a definite integral using the Monte Carlo f-Average method." ] }, { "cell_type": "code", "execution_count": 1, "id": "encouraging-moisture", "metadata": { "tags": [] }, "outputs": [], "source": [ "# Import basic Python modules\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "bb894dd5-624f-45ef-8475-0d47d52ac4ad", "metadata": {}, "source": [ "In all Monte Carlo simulations, it is necessary to generate random or pseudo-random numbers. The Python command ```np.random.uniform()``` from the NumPy module generates random numbers uniformly distributed between zero and one. \n", "\n", "In the cell below, we use this command to generate a single sample." ] }, { "cell_type": "code", "execution_count": 2, "id": "needed-currency", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0.6495219522657778" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.uniform()" ] }, { "cell_type": "markdown", "id": "9ae80ab1-4b3e-4698-a0b9-b3a502e2afff", "metadata": {}, "source": [ "To confirm that the numbers generated are uniformly distribted on the interval $[0, 1]$, we can generate a long list of these numbers and plot a histogram. ```np.random.uniform(a, b, n)``` returns $n$ random numbers uniformly distributed between $a$ and $b$.\n", "\n", "In the cell below, we use this command to generate $10^4$ random numbers between $0$ and $1$." ] }, { "cell_type": "code", "execution_count": 3, "id": "capable-volleyball", "metadata": { "tags": [] }, "outputs": [], "source": [ "nos = np.random.uniform(0, 1, int(1e4))" ] }, { "cell_type": "markdown", "id": "a1d7f233-c00b-4681-9e3d-5de8744ce9d7", "metadata": {}, "source": [ "Here's a histogram of the $10^4$ uniformly-distributed random numbers. " ] }, { "cell_type": "code", "execution_count": 4, "id": "operating-sample", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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tcvatWuXJcmaPXu2tWvXLucl/oHwXkjYaaKXXnrJSkpKssLCwqxf/OIXVn5+vvPYyJEjrT59+ri037hxo3XddddZYWFh1k9/+lNrwYIFPq44ODWmn/v06WNJqrGNHDnS94UHoca+pv8XYafhGtvP+/fvt/r3729FRERYHTp0sLKysqwzZ874uOrg09h+fvHFF62rr77aioiIsOLj4617773XOnLkiI+rDi4ffvhhvefcQHgvtFkWY3MAAMBcrNkBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKMRdgAAgNEIOwCM8+2338rhcGj69OnOfR9//LHCwsKUm5vrx8oA+AM/BArASOvXr9cdd9yhgoICdenSRdddd51uu+02zZ0719+lAfAxwg4AYz3yyCPasGGDrr/+en3yySfavn27wsPD/V0WAB8j7AAwVmVlpVJSUlRUVKQdO3bommuu8XdJAPyANTsAjHXw4EEdPXpUFy5c0KFDh/xdDgA/YWQHgJGqq6vVs2dPXXvtterSpYtmz56tPXv2KC4uzt+lAfAxwg4AIz355JNau3atPvnkE1122WXq27evoqKi9Le//c3fpQHwMaaxABhn48aNmjt3rpYvX67o6GiFhIRo+fLl2rJlixYsWODv8gD4GCM7AADAaIzsAAAAoxF2AACA0Qg7AADAaIQdAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBo/w+4qEA+DZtbwwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nbins = 50\n", "plt.hist(nos, nbins, color = 'c', edgecolor = 'k')\n", "plt.xlabel('x');\n", "plt.ylabel('counts');" ] }, { "cell_type": "markdown", "id": "0377d33f-574b-421d-b6b4-b1adb2eb3870", "metadata": {}, "source": [ "This tutorial will first attempt to evaluate an integral for which the solution is easily obtained. This approach has been taken purposely so that we can confirm that our numerical techniques are reliable. The function that we will integrate is a simple polynomial. Below, the function is plotted on the interval $x = [0, 1]$ and the exact value of the integral is evaluated over the same interval. We are going to use this polynomial over and over again in this tutorial, so we define it as a function." ] }, { "cell_type": "code", "execution_count": 5, "id": "objective-motel", "metadata": { "tags": [] }, "outputs": [], "source": [ "fcn = lambda x : (-65536*x**8 + 262144*x**7 - 409600*x**6 + 311296*x**5 -\\\n", " 114688*x**4 + 16384*x**3)/27" ] }, { "cell_type": "markdown", "id": "251aee6a-c76b-49fc-a567-594da8073699", "metadata": {}, "source": [ "Here's a plot of the function over the interval $0\\le x\\le 1$." ] }, { "cell_type": "code", "execution_count": 6, "id": "satisfied-parts", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xx = np.arange(0, 1, 0.001)\n", "plt.figure()\n", "plt.plot(xx, fcn(xx), 'k-', linewidth = 1.2)\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)');" ] }, { "cell_type": "markdown", "id": "63313f25-a225-416c-a26f-9237cc617a8d", "metadata": {}, "source": [ "Here's how we can use the SymPy module to do symbolic integration in Python. We first need to import the SymPy module. We can then evaluate the indefinite integral symbolically." ] }, { "cell_type": "code", "execution_count": 7, "id": "personalized-incidence", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle - \\frac{65536 x^{9}}{243} + \\frac{32768 x^{8}}{27} - \\frac{409600 x^{7}}{189} + \\frac{155648 x^{6}}{81} - \\frac{114688 x^{5}}{135} + \\frac{4096 x^{4}}{27}$" ], "text/plain": [ "-65536*x**9/243 + 32768*x**8/27 - 409600*x**7/189 + 155648*x**6/81 - 114688*x**5/135 + 4096*x**4/27" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sympy as sym\n", "x = sym.Symbol('x')\n", "fint = sym.integrate(fcn(x), x)\n", "fint" ] }, { "cell_type": "markdown", "id": "45b18b13-5bdb-4cc7-97b6-aaf8e0244e9b", "metadata": {}, "source": [ "We can also evaluate the definite integram using SymPy." ] }, { "cell_type": "code", "execution_count": 8, "id": "loved-nicholas", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4096/8505\n", "The exact integral of f(x) on 0 < x < 1 is 0.481599059376837\n" ] } ], "source": [ "fint = sym.integrate(fcn(x), (x, 0, 1))\n", "print(fint)\n", "print('The exact integral of f(x) on 0 < x < 1 is', sym.N(fint))" ] }, { "cell_type": "markdown", "id": "030dce8e-0654-4418-bab2-f592474c64be", "metadata": {}, "source": [ "The $f$-average method requires that we repeatedly generate $x_i$ random numbers ($n$ times) uniformly distributed between the integration interval ($0$ to $1$ in this example). For each $x_i$ we calculate the corresponding $f(x_i)$ and sum all of these values to find $f_\\mathrm{tot}$. $f_\\mathrm{avg}$ is obtained from $f_\\mathrm{avg} = f_\\mathrm{tot}/n$. An estimate of the integral $I$ is given by the integration interval $b-a$ multiplied by $f_\\mathrm{avg}$: $I = (b - a)f_\\mathrm{avg}$." ] }, { "cell_type": "code", "execution_count": 9, "id": "optimum-metadata", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The f-average estimate of the integral of f(x) on 0 < x < 1 is 0.4879010563744467\n" ] } ], "source": [ "n = int(1e4) # Set the number of trials\n", "a = 0 # Lower integration limit\n", "b = 1 # Upper integration limit\n", "xx = np.random.uniform(a, b, n) # Generate n random samples of x_i\n", "fList = fcn(xx) # Calculate the f(x) at each value of x\n", "ftot = sum(fList) # Sum all of the f(x) values in fList\n", "I = (b - a)*ftot/n # Calculate the value of favg. In this case, the interval (b - a) = 1\n", "print('The f-average estimate of the integral of f(x) on 0 < x < 1 is', I)" ] }, { "cell_type": "markdown", "id": "1f66dcf1-a575-42f3-8af2-d1f69b503609", "metadata": {}, "source": [ "In the plot below, we show each of the $f(x_i)$ values and $f_{\\mathrm{avg}}$. The square area below the red line is approximately equal to the area beneath the blue curve which is the integral that we're trying to evaluate." ] }, { "cell_type": "code", "execution_count": 10, "id": "seven-break", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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eR9kcyM0Z84co127dkZkZKTRo0cPY/Xq1Wf+3913321cffXVFeo//fRTo3v37kZkZKRxwQUXGPPmzbM4sTtJHuerr77aAFDp6+6777Y+uMtI/55/jc2NOunjvHXrVqNv375GvXr1jLZt2xrjx483jh07ZnFq95E+zrNnzzY6d+5s1KtXz2jVqpVx5513Gnv27LE4tbt88sknNb7eOuV9MMQwOP5GRERE3sE5N0REROQpbG6IiIjIU9jcEBERkaewuSEiIiJPYXNDREREnsLmhoiIiDyFzQ0RERF5CpsbIiIi8hQ2N0REROQpbG6IiIjIU9jcEBERkaewuSEi1ztw4ABatmyJ559//sxtn332GSIjI7Fq1SobkxGRHXhwJhF5QkZGBgYPHowNGzagU6dO6N69O2688UbMnDnT7mhEZDE2N0TkGQ8++CA++ugjXH755fjqq6/wxRdfIDo62u5YRGQxNjdE5BnHjx9H165dsXv3bmzatAmXXnqp3ZGIyAacc0NEnrFjxw7s27cPZWVl2LVrl91xiMgmHLkhIk8oKSlBz5490a1bN3Tq1AkzZszAN998g9jYWLujEZHF2NwQkSdMnDgRy5cvx1dffYWGDRvi2muvRaNGjfD+++/bHY2ILMbLUkTkep9++ilmzpyJN954AzExMQgNDcUbb7yBdevWYd68eXbHIyKLceSGiIiIPIUjN0REROQpbG6IiIjIU9jcEBERkaewuSEiIiJPYXNDREREnsLmhoiIiDyFzQ0RERF5CpsbIiIi8hQ2N0REROQpbG6IiIjIU9jcEBERkaf8f8cJD0RVkodnAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(xx, fList, 'bo', fillstyle = 'none')\n", "plt.plot(xx, I*np.ones(n), 'r-', linewidth = 3)\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)');" ] }, { "cell_type": "markdown", "id": "334dda4f-f8dc-4546-9ed9-0c21efe5a9b8", "metadata": {}, "source": [ "If you don't need to keep track of the actual coordinates of each $(x, f(x))$, then you can get away with a more compact block of code that only calculates $f_\\mathrm{tot}$." ] }, { "cell_type": "code", "execution_count": 11, "id": "miniature-cabin", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The f-average estimate of the integral of f(x) on 0 < x < 1 is 0.47673094936995675\n" ] } ], "source": [ "n = int(1e4) # Set the number of trials\n", "a = 0 # Lower integration limit\n", "b = 1 # Upper integration limit\n", "xx = np.random.uniform(a, b, n) # Generate n random samples of x_i\n", "ftot = sum(fcn(xx)) # Calculate the sum of f(x_i) for all i = 1 .. n\n", "I = (b - a)*ftot/n # Estimate the value of the integral \n", "print('The f-average estimate of the integral of f(x) on 0 < x < 1 is', I)" ] }, { "cell_type": "markdown", "id": "790fd030-3bc7-409d-ab79-27da6b60f487", "metadata": {}, "source": [ "Now we will numberically approximate the integral using $n = 10,000$ five thousand times and plot the resulting distribution of our determination of the integral. The distribution is expected to be Gaussian.\n", "\n", "To keep track of how long this block of codes takes to complete, we'll use the ```datetime.now()``` function to display the time before and after the loop." ] }, { "cell_type": "code", "execution_count": 12, "id": "furnished-unknown", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-04-10 16:48:01.356913\n", "0%\n", "10%\n", "20%\n", "30%\n", "40%\n", "50%\n", "60%\n", "70%\n", "80%\n", "90%\n", "2024-04-10 16:48:23.701795\n" ] }, { "data": { "image/png": "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n36qwsJCnX/++ec0gIcfflg33nijMjMzvdoPHDggl8ulrKwsT5vdbtfQoUO1detWSVJpaalOnjzp1Sc+Pt5zy35L8vPzFRMT49kSEhLOacwAACD4hZ5L5wEDBshms8lms+n6669vtj8iIkILFy4863rr1q3TJ598oh07djTb53K5JEkOh8Or3eFw6ODBg54+YWFhzb6WczgcnvefyYwZMzRlyhTP65qaGoIQAAAWc04h6MCBAzIMQxdddJG2b9+uHj16ePaFhYWpZ8+eCgkJOatahw4d0u9+9ztt3LhR4eHhLfaz2Wxerw3DaNZ2ul/qY7fbPc85AgAA1nROISgxMVGS1NTU1OoDl5aWqrKyUoMGDfK0NTY26oMPPtCiRYu0b98+Saeu9vTq1cvTp7Ky0nN1yOl0qqGhQVVVVV5XgyorK5Went7qMQIAgI7rnELQ3/v888+1adMmVVZWNgtFTz311C++f9iwYdq1a5dX2z333KM+ffpo+vTpuuiii+R0OlVUVKSBAwdKkhoaGlRSUqLnn39ekjRo0CB17txZRUVFGjdunCSpoqJCu3fv1ty5c309NQAAYAE+haDly5froYceUlxcnJxOp9dXTzab7axCUFRUlFJTU73aunTpotjYWE97dna28vLylJycrOTkZOXl5SkyMlLjx4+XJMXExGjixImaOnWqYmNj1b17d02bNk1paWnNFloDAAD8PZ9C0HPPPac5c+Zo+vTp/h6Pl5ycHNXV1WnSpEmqqqrSkCFDtHHjRkVFRXn6LFiwQKGhoRo3bpzq6uo0bNgwrVq16qzXJgEAAGvyKQRVVVXplltu8fdYtGnTJq/XNptNubm5ys3NbfE94eHhWrhw4TndlQYAAODTwxJvueUWbdy40d9jAQAAaDM+XQm65JJL9OSTT2rbtm1KS0tT586dvfY/+uijfhkcAABAoPgUgpYtW6auXbuqpKREJSUlXvtsNhshCAAAtHs+haADBw74exwAAABtyqc1QQAAAMHOpytB995778/uX7FihU+DAQAAaCs+3yL/906ePKndu3fr6NGjZ/xhVQBnVl5eLrfb7deaZWVlfq0HAB2VTyFo/fr1zdqampo0adIkXXTRRa0eFGAF5eXlurRvX504ftzsoQCAJfn822Gn69Spkx577DFlZGQoJyfHX2WBDsvtdp8KQDNnSn/7cWK/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+OGHXu1z5swxUlJSzvie2bNnG5LY2NjY2NjYOsB26NAhnzJE0F8J+onNZvN6bRhGs7afzJgxQ1OmTPG8bmpq0pEjRxQbG9vie9pCTU2NEhISdOjQIUVHR5s2jo6OeQ485rhtMM+Bxxy3DV/n2TAMHTt2TPHx8T4dN+hDUFxcnEJCQuRyubzaKysr5XA4zvgeu93e7K6q8847L1BDPGfR0dH8x9YGmOfAY47bBvMceMxx2/BlnmNiYnw+XtA/JygsLEyDBg1SUVGRV3tRUZHS09NNGhUAAGjvgv5KkCRNmTJFd955pwYPHqyrr75ay5YtU3l5uR588EGzhwYAANqpDhGCbr31Vn3//fd65plnVFFRodTUVL3zzjtK9PftgwFmt9s1e/bsgDwAEf+PeQ485rhtMM+Bxxy3DbPm2WYYvt5XBgAAELyCfk0QAACALwhBAADAkghBAADAkghBAADAkghBfrR48WIlJSUpPDxcgwYN0ubNm8/qfR9++KFCQ0M1YMAAr/aMjAzZbLZm24033uiX4wYrM+Y5Nze32X6n0+nP02pX/D3H0qkfNr700ksVERGhhIQEPfbYYzpx4oRfjhuszJhnPsutm+OTJ0/qmWee0cUXX6zw8HD1799f7777rt+OG6zMmGe/fJZ9+rENNLNu3Tqjc+fOxvLly429e/cav/vd74wuXboYBw8e/Nn3HT161LjooouMrKwso3///l77vv/+e6OiosKz7d692wgJCTFWrlzZ6uMGK7Pmefbs2Ua/fv28+lVWVgbgDM0XiDles2aNYbfbjZdfftk4cOCAsWHDBqNXr15GdnZ2q48brMyaZz7LrZvjnJwcIz4+3nj77beNL7/80li8eLERHh5ufPLJJ60+brAya5798VkmBPnJVVddZTz44INebX369DEef/zxn33frbfeajzxxBPG7Nmzm30ITrdgwQIjKirKqK2tbfVxg5VZ83w27+soAjHHDz/8sHH99dd7tU2ZMsW49tprW33cYGXWPPNZbt0c9+rVy1i0aJFX20033WTccccdrT5usDJrnv3xWebrMD9oaGhQaWmpsrKyvNqzsrK0devWFt+3cuVKffnll5o9e/ZZHaewsFC33XabunTp0qrjBiuz5vknX3zxheLj45WUlKTbbrtN+/fvP/eTaOcCNcfXXnutSktLtX37dknS/v379c4773i+cuSzfEqg5/knfJZ9n+P6+nqFh4d7tUVERGjLli2tOm6wMmuef9Laz3KHeGK02dxutxobG5v9YKvD4Wj2w64/+eKLL/T4449r8+bNCg395X8N27dv1+7du1VYWNiq4wYzs+ZZkoYMGaIXX3xRKSkp+vbbb/Xcc88pPT1de/bsUWxsrO8n1c4Eao5vu+02fffdd7r22mtlGIZ+/PFHPfTQQ3r88cd9Pm4wM2ueJT7LrZ3jESNGaP78+bruuut08cUX67333tPrr7+uxsZGn48bzMyaZ8k/n2WuBPmRzWbzem0YRrM2SWpsbNT48eP19NNPKyUl5axqFxYWKjU1VVdddZXPx+0ozJjnkSNH6uabb1ZaWpoyMzP19ttvS5JWr17t41m0b/6e402bNmnOnDlavHixPvnkE7322mt666239Oyzz/p03I7CjHnms9y6OX7hhReUnJysPn36KCwsTI888ojuuecehYSE+HTcjsKMefbLZ7lVX6bBMAzDqK+vN0JCQozXXnvNq/3RRx81rrvuumb9q6qqDElGSEiIZ7PZbJ629957z6v/Dz/8YERHRxsFBQWtOm6wM2ueW5KZmdnse/BgF6g5vvbaa41p06Z5vfell14yIiIijMbGRj7LfxPoeW4Jn+Vz/3tRV1dnHD582GhqajJycnKMyy67zKfjBjuz5rkl5/pZ5kqQH4SFhWnQoEEqKiryai8qKlJ6enqz/tHR0dq1a5d27tzp2R588EFdeuml2rlzp4YMGeLV/49//KPq6+s1YcKEVh032Jk1z2dSX1+vsrIy9erVq3Un1c4Eao6PHz+uTp28/9yEhITIOHVzBp/lvwn0PJ8Jn+VTzvXvRXh4uM4//3z9+OOPevXVV3XTTTf5dNxgZ9Y8n4lPn+Wzjkv4WT/dIlhYWGjs3bvXyM7ONrp06WJ89dVXhmEYxuOPP27ceeedLb7/51a5X3vttcatt97q03E7GrPmeerUqcamTZuM/fv3G9u2bTNGjRplREVFdch5DsQcz54924iKijJeeeUVY//+/cbGjRuNiy++2Bg3btxZH7ejMWue+Sy3bo63bdtmvPrqq8aXX35pfPDBB8b1119vJCUlGVVVVWd93I7GrHn2x2eZhdF+cuutt+r777/XM888o4qKCqWmpuqdd95RYmKiJKmiokLl5eXnXPfzzz/Xli1btHHjRp+O29GYNc+HDx/W7bffLrfbrR49euhXv/qVtm3b1iHnORBz/MQTT8hms+mJJ57Q119/rR49emj06NGaM2fOWR+3ozFrnvkst26OT5w4oSeeeEL79+9X165ddcMNN+ill17Seeedd9bH7WjMmmd/fJZthtHCNVIAAIAOjDVBAADAkghBAADAkghBAADAkghBAADAkghBAADAkghBAADAkghBAADAkghBAADAkghBAEyTkZGh7Oxss4fRKhdeeKEKCgrMHgYAH/CzGQBM89prr6lz585n1ferr75SUlKSPv30Uw0YMCCwAwNgCYQgAKbp3r272UM4I8Mw1NjYqNBQ/kQCHRlfhwEwzd9/HXbhhRcqLy9P9957r6KiotS7d28tW7bM0zcpKUmSNHDgQNlsNmVkZHj2rVy5Un379lV4eLj69OmjxYsXex1n69atGjBggMLDwzV48GD96U9/ks1m086dOyVJmzZtks1m04YNGzR48GDZ7XZt3rxZX375pW666SY5HA517dpVV155pYqLiwM6JwDaDiEIQLsxb948DR48WJ9++qkmTZqkhx56SH/9618lSdu3b5ckFRcXq6KiQq+99pokafny5Zo1a5bmzJmjsrIy5eXl6cknn9Tq1aslSceOHdPo0aOVlpamTz75RM8++6ymT59+xuPn5OQoPz9fZWVluvzyy1VbW6sbbrhBxcXF+vTTTzVixAiNHj36nH8RG0D7xLVeAO3GDTfcoEmTJkmSpk+frgULFmjTpk3q06ePevToIUmKjY2V0+n0vOfZZ5/VvHnzNHbsWEmnrhjt3btXS5cu1V133aWXX35ZNptNy5cvV3h4uC677DJ9/fXXuv/++5sd/5lnntHw4cM9r2NjY9W/f3/P6+eee07r16/XG2+8oUceeSQgcwCg7RCCALQbl19+ueefbTabnE6nKisrW+z/3Xff6dChQ5o4caJXqPnxxx8VExMjSdq3b58uv/xyhYeHe/ZfddVVZ6w3ePBgr9c//PCDnn76ab311lv65ptv9OOPP6quro4rQUAHQQgC0G6cfqeYzWZTU1NTi/1/2rd8+XINGTLEa19ISIikU4ucbTab1z7DMM5Yr0uXLl6v/+Vf/kUbNmzQv/3bv+mSSy5RRESE/vmf/1kNDQ1nd0IA2jVCEICgEBYWJklqbGz0tDkcDp1//vnav3+/7rjjjjO+r0+fPnr55ZdVX18vu90uSfr444/P6pibN2/W3XffrX/6p3+SJNXW1uqrr75qxVkAaE9YGA0gKPTs2VMRERF699139e2336q6ulqSlJubq/z8fL3wwgv6/PPPtWvXLq1cuVLz58+XJI0fP15NTU367W9/q7KyMs+VHUnNrhCd7pJLLtFrr72mnTt36i9/+YunFoCOgRAEICiEhobq3//937V06VLFx8frpptukiTdd999+s///E+tWrVKaWlpGjp0qFatWuW5pT46Olpvvvmmdu7cqQEDBmjWrFl66qmnJMlrndCZLFiwQN26dVN6erpGjx6tESNG6IorrgjsiQJoMzajpS/HAaCDevnll3XPPfeourpaERERZg8HgElYEwSgw3vxxRd10UUX6fzzz9df/vIXTZ8+XePGjSMAARZHCALQ4blcLj311FNyuVzq1auXbrnlFs2ZM8fsYQEwGV+HAQAAS2JhNAAAsCRCEAAAsCRCEAAAsCRCEAAAsCRCEAAAsCRCEAAAsCRCEAAAsCRCEAAAsKT/A3Yl6hT9CL1dAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from datetime import datetime\n", "print(datetime.now()) # Start time\n", "n = int(1e4) # Set the value of n\n", "m = int(5e3) # Estimate the value of the integral m times\n", "a = 0 # Lower integration limit\n", "b = 1 # Upper integration limit\n", "intList = [] # Prepare an empty list to store the values of I\n", "for j in range(m):\n", " if j % int(m/10) == 0:\n", " print(int(j/(m/100)), '%', sep = '')\n", " xx = np.random.uniform(a, b, n) # Generate n random samples of x_i\n", " ftot = sum(fcn(xx)) # Calculate the sum of f(x_i) for all i = 1 .. n\n", " intList = intList + [(b - a)*ftot/n]\n", "print(datetime.now())\n", "plt.figure()\n", "nbins = 20\n", "plt.hist(intList, nbins, color = 'c', edgecolor = 'k')\n", "plt.xlabel('integral')\n", "plt.ylabel('counts');" ] }, { "cell_type": "markdown", "id": "f9a1f002-576d-457c-924c-a7034630b7d9", "metadata": {}, "source": [ "The width of the distribution can be calculated from the standard deviation of the list of $5000$ approximations of the integral and is an estimate in the uncertainty of our determination of the definite integral.\n", "\n", "The standard deviation can be calculated easily using the statistics module." ] }, { "cell_type": "code", "execution_count": 13, "id": "advisory-think", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0.0035677166212645193" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import statistics\n", "statistics.stdev(intList)" ] }, { "cell_type": "markdown", "id": "7a5d3f87-0247-4b03-b30a-32e0ed27afaa", "metadata": {}, "source": [ "Finally, the last thing we'll attempt to do is to understand how our uncertainly (standard deviation) depends on $n$. So far, all of our calculations have used $n = 10^4$. Now we'll determine the standard deviation for values of $n$ that range from $100$ to $10^5$. This block of code took my laptop about 18 minutes to complete... If you've got a lot time to kill, trying running the same code in Maple!" ] }, { "cell_type": "code", "execution_count": 39, "id": "affiliated-accent", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-04-05 13:09:59.655056\n", "1 of 10\n", "2 of 10\n", "3 of 10\n", "4 of 10\n", "5 of 10\n", "6 of 10\n", "7 of 10\n", "8 of 10\n", "9 of 10\n", "10 of 10\n", "2024-04-05 13:14:47.859982\n" ] } ], "source": [ "print(datetime.now()) # Start time\n", "nList = [100, 200, 500, 1000, 2000, 5000, 1e4, 2e4, 5e4, 1e5] # List of n values\n", "a = 0 # Lower integration limit\n", "b = 1 # Upper integration limit\n", "sigmaList = [] # Set up an empty list that will be used to store the sigma values\n", "for k in range(len(nList)): \n", " intList = [] # Set up an empty list to store the values of I\n", " print(k+1, 'of', len(nList)) \n", " n = int(nList[k])\n", " for j in range(m):\n", " xx = np.random.uniform(a, b, n) # Generate n random samples of x_i\n", " ftot = sum(fcn(xx)) # Calculate the sum of f(x_i) for all i = 1 .. n\n", " intList = intList + [(b - a)*ftot/n] # Add the I values to the appropriate list\n", " sigmaList = sigmaList + [statistics.stdev(intList)] # Calculate the standard deviation and add it to the appropriate list\n", "print(datetime.now()) # End time" ] }, { "cell_type": "markdown", "id": "ea1c26eb-7c45-4d9d-89f9-c9559e40064b", "metadata": {}, "source": [ "Below we plot the uncertainty in the numerical integral estimation as a function of $n$ (the number of trials in the Monte Carlo simulation). As expected, the uncertainty decreases as the number of trials increases. The $\\sigma$ values are proportional to $1/\\sqrt{n}$." ] }, { "cell_type": "code", "execution_count": 40, "id": "personal-stationery", "metadata": {}, "outputs": [ { "data": { "image/png": "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UAYAAGAAQhkAAIABCGUAAAAGIJQBAAAYgFAGAABgAEIZAACAAQhlAAAABiCUAQAAGIBQBgAAYABCGQAAgAEIZQAAAAYglAEAABig1/ns3NzcLIfDoRMnTuiqq65Sv379OqtfAAAAl5RzvlN27NgxPffccxo7dqyCgoIUExOj6667TldddZWuvvpq3X333dqxY8eF6CsAAECPdU6h7Omnn1ZMTIxeeOEFpaWlqaioSLt27dLHH38su92uZcuW6dSpU5o4caJuvPFG7d2790L1GwAAoEfxsSzLOtvi7OxsLVmyRIMHD263rqmpSS+88IL8/f314x//+Lw7abKGhgYFBwervr5eQUFBXd0dAABwFky8fp9TKENbJv6PCgAA2mfi9ZunLwEAAAxwTk9f5ubmnnXt008/fc6dAQAAuFSdUyirrKz0+LuiokKnTp3StddeK0n6+OOP5efnpxEjRnReDwEAAC4B5xTK3nrrLfd/P/3007ryyiv10ksvqW/fvpKkL774QjNnztSYMWM6t5cAAAA9XIcn+g8YMEB/+tOf2jyJWVVVpYkTJ+qzzz7rlA6azsSJggAAoH0mXr87PNG/oaFBhw4datN+6NAhHTt27Lw6BQAAcKnpcCi79dZbNXPmTBUWFuqTTz7RJ598ot///vfKyclRZmZmZ/YRAACgx+vwb18WFBTogQce0B133KHm5mbXwXr1Uk5Ojp588slO6yAAAMCl4LwXj21sbNTf//53SdL3vvc99enTp1M61l2Y+J00AABon4nX7w5/fVldXS3LstSnTx8NHTpUQ4cOdQey6urqTusgAADApaDDoSw2NtbrRP/PP/9csbGx59UpAACAS02HQ5llWfLx8WnTfvz4cQUGBp5XpwAAAC415zzRv/Wnlnx8fPTQQw/p8ssvd29raWlRWVmZEhMTO62DAAAAl4JzvlNWWVmpyspKWZal999/3/13ZWWldu/erWHDhunFF1/sUGfWrFmjmJgYBQYGymazafv27e3Wb9y4UfHx8QoMDFRCQoI2bdrk3tbc3KyFCxcqISFBffr0UVRUlKZPn95mUdsjR45o2rRpCgoKUkhIiHJycnT8+PEO9R8AAKCjOvz05cyZM/XMM8902hMLGzZs0PTp01VQUCCbzaZVq1Zp48aN2rNnj/r379+mftu2bfrBD36g/Px8/fM//7PWrVun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qqzf/e53Vu/eva3nn3/eXfO///u/lp+fn/XEE09YH374obVkyRLrsssus95///2LMxjn6NFHH7VCQ0Ot4uJia9++fdbGjRutK664wnrmmWfcNYzd1zZt2mT9/Oc/twoLCy1J1muvveax3aSxOpu+XEztjd3Ro0ettLQ0a8OGDdbu3bstu91uJScnWyNGjPA4RncbO0KZIZKTk6377rvP/XdLS4sVFRVl5efnd2GvLq66ujpLkvWXv/zFsizXP7rLLrvM2rhxo7vmo48+siRZdrvdsizXP1pfX1/L4XC4a5577jkrKCjIampqsizLsn72s59ZgwcP9visrKwsKz093f13dx3/Y8eOWYMGDbJKSkqssWPHukMZY9e+hQsXWqNHjz7jdqfTaUVERFhPPvmku+3o0aNWQECA9bvf/c6yLMv68MMPLUnWjh073DX/8z//Y/n4+FiffvqpZVmW9atf/crq27evezxbP/vaa691/3377bdbkyZN8vh8m81m3XPPPed3khfIpEmTrB//+McebZmZmda0adMsy2Ls2vPNYGHSWJ1NX7qSt0D7Tdu3b7ckWQcOHLAsq3uOHV9fGuDkyZMqLy9XWlqau83X11dpaWmy2+1d2LOLq76+XpLcPw5bXl6u5uZmj3GJj4/XwIED3eNit9uVkJDgXmRYktLT09XQ0KAPPvjAXXP6MVprWo/Rncf/vvvu06RJk9qcH2PXvtdff11JSUn60Y9+pP79+2v48OH69a9/7d6+b98+ORwOj/MKDg6WzWbzGL+QkBAlJSW5a9LS0uTr66uysjJ3zQ9+8AP5+/u7a9LT07Vnzx598cUX7pr2xtg0o0aNUmlpqT7++GNJ0l//+le98847uummmyQxdufCpLE6m76Yrr6+Xj4+Pu7fo+6OY0coM8Dhw4fV0tLicXGUpPDwcDkcji7q1cXldDo1b948ff/733f/KoPD4ZC/v3+bH3w/fVwcDofXcWvd1l5NQ0ODvvzyy247/uvXr1dFRYX7p8dOx9i17x//+Ieee+45DRo0SG+88YZ+8pOf6P7779dLL70k6evzb++8HA6H+vfv77G9V69e6tevX6eMsanjt2jRIk2dOlXx8fG67LLLNHz4cM2bN0/Tpk2TxNidC5PG6mz6YrKvvvpKCxcuVHZ2tvvH2bvj2BnzM0u4tN13332qqqrSO++809Vd6RYOHjyouXPnqqSkxONnw3B2nE6nkpKS9Nhjj0mShg8frqqqKhUUFGjGjBld3DuzvfLKK3r55Ze1bt06DR48WLt27dK8efMUFRXF2KFLNDc36/bbb5dlWXruuee6ujvnhTtlBggLC5Ofn1+bJ+Nqa2sVERHRRb26eGbPnq3i4mK99dZb+s53vuNuj4iI0MmTJ3X06FGP+tPHJSIiwuu4tW5rryYoKEi9e/fuluNfXl6uuro63XDDDerVq5d69eqlv/zlL3r22WfVq1cvhYeHM3btiIyM1PXXX+/Rdt1116m6ulrS1+ff3nlFRESorq7OY/upU6d05MiRThljU8fvwQcfdN8tS0hI0F133aX58+e779gydmfPpLE6m76YqDWQHThwQCUlJe67ZFL3HDtCmQH8/f01YsQIlZaWutucTqdKS0uVmprahT27sCzL0uzZs/Xaa69py5Ytio2N9dg+YsQIXXbZZR7jsmfPHlVXV7vHJTU1Ve+//77HP7zWf5itF93U1FSPY7TWtB6jO47/hAkT9P7772vXrl3uV1JSkqZNm+b+b8buzL7//e+3WX7l448/1tVXXy1Jio2NVUREhMd5NTQ0qKyszGP8jh49qvLycnfNli1b5HQ6ZbPZ3DVvv/22mpub3TUlJSW69tpr1bdvX3dNe2NsmhMnTsjX1/PS4efnJ6fTKYmxOxcmjdXZ9MU0rYFs7969evPNNxUaGuqxvVuO3Tk9FoALZv369VZAQID14osvWh9++KE1a9YsKyQkxOPJuJ7mJz/5iRUcHGz9+c9/tmpqatyvEydOuGvuvfdea+DAgdaWLVusnTt3WqmpqVZqaqp7e+uyDhMnTrR27dplbd682brqqqu8Luvw4IMPWh999JG1Zs0ar8s6dPfxP/3pS8ti7Nqzfft2q1evXtajjz5q7d2713r55Zetyy+/3Pqv//ovd82KFSuskJAQ67//+7+t9957z5o8ebLXpQqGDx9ulZWVWe+88441aNAgj8ftjx49aoWHh1t33XWXVVVVZa1fv966/PLL2zxu36tXL+upp56yPvroI2vZsmXGLetwuhkzZlgDBgxwL4lRWFhohYWFWT/72c/cNYzd144dO2ZVVlZalZWVliTr6aeftiorK91PCJo0VmfTl4upvbE7efKkdcstt1jf+c53rF27dnlcQ05/krK7jR2hzCC//OUvrYEDB1r+/v5WcnKy9e6773Z1ly4oSV5fL7zwgrvmyy+/tH76059affv2tS6//HLr1ltvtWpqajyOs3//fuumm26yevfubYWFhVkLFiywmpubPWreeustKzEx0fL397e++93venxGq+4+/t8MZYxd+/7whz9YQ4YMsQICAqz4+Hhr7dq1HtudTqf10EMPWeHh4VZAQIA1YcIEa8+ePR41n3/+uZWdnW1dccUVVlBQkDVz5kzr2LFjHjV//etfrdGjR1sBAQHWgAEDrBUrVrTpyyuvvGJdc801lr+/vzV48GDrj3/8Y+efcCdpaGiw5s6daw0cONAKDAy0vvvd71o///nPPS6EjN3X3nrrLa//PzdjxgzLsswaq7Ppy8XU3tjt27fvjNeQt956y32M7jZ2PpZ12jLMAAAA6BLMKQMAADAAoQwAAMAAhDIAAAADEMoAAAAMQCgDAAAwAKEMAADAAIQyAAAAAxDKAAAADEAoAwAAMAChDAAAwAC9uroDAGCacePGaejQoQoMDNR//Md/yN/fX/fee6+WL1/e1V0D0INxpwwAvHjppZfUp08flZWV6YknntAjjzyikpKSru4WgB6MHyQHgG8YN26cWlpatHXrVndbcnKy/umf/kkrVqzowp4B6Mm4UwYAXgwdOtTj78jISNXV1XVRbwBcCghlAODFZZdd5vG3j4+PnE5nF/UGwKWAUAYAAGAAQhkAAIABCGUAAAAG4OlLAAAAA3CnDAAAwACEMgAAAAMQygAAAAxAKAMAADAAoQwAAMAAhDIAAAADEMoAAAAMQCgDAAAwAKEMAADAAIQyAAAAAxDKAAAADEAoAwAAMMD/B8bxrSjpRh9bAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(nList, sigmaList, 'bo', fillstyle = 'none')\n", "plt.xlabel('n')\n", "plt.ylabel(r'$\\sigma$ (std)')\n", "plt.axis((-5e3, 1.2e5, 0, 0.04));" ] }, { "cell_type": "markdown", "id": "8eaf7b8c-6f90-4d6d-9f74-5fb77b472bdc", "metadata": {}, "source": [ "To get a better appreciation of the dependence of $\\sigma$ on $n$, below we plot $\\sigma$ as a function of $1/\\sqrt{n}$ and observe the linear relationship between the two. Beautiful! All of this generated from uniformly distributed random numbers! Take a moment to reflect on what we've accomplished. We've used Monte Carlo simulations to study the behaviour of Monte Carlo simulations! The objective of a Monte Carlo calculation is always to study the characteristics of some system (often a physical system) by simulating data using random numbers." ] }, { "cell_type": "code", "execution_count": 41, "id": "virgin-bathroom", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAAG6CAYAAAD3WWkdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/eElEQVR4nO3df1SUdd7/8RcMAa0bkJL8MAzuME1FKJUBv7rokRU3zyqRG5Kl6+2t7blXU7E28TatThv2Q9ct3Vjv09buuTPMliVv8tgSuZu7TqiAFZZl3SqaDOq6glIhMtf3j1kmJ+YyUH7M4PNxzpxxPtf7+sznuvI4r675zOfyMwzDEAAAANrw7+kBAAAAeCuCEgAAgAmCEgAAgAmCEgAAgAmCEgAAgAmCEgAAgAmCEgAAgAmCEgAAgAmCEgAAgAmCEgAAgAmvCkobNmxQbGysgoODZbVatXv37kvWb9myRUOGDFFwcLASEhK0bds209qf/exn8vPz07p169zaT58+rZkzZyokJERhYWGaO3euzp071xmHAwAAfJzXBKXNmzcrNzdXq1atUmVlpRITE5WRkaETJ054rN+1a5dycnI0d+5cVVVVKTMzU5mZmaqurm5T+6c//UnvvfeeoqOj22ybOXOm9u/fr9LSUpWUlOjdd9/V/PnzO/34AACA7/HzlpviWq1WjR49WuvXr5ckORwOxcTEaOHChVq2bFmb+uzsbDU2NqqkpMTVlpKSoqSkJBUUFLjavvjiC1mtVr311luaMmWKFi9erMWLF0uSPv74Yw0dOlR79uzRqFGjJEnbt2/XHXfcoWPHjnkMVgAA4OoR0NMDkKTz58+roqJCeXl5rjZ/f3+lp6fLZrN53Mdmsyk3N9etLSMjQ8XFxa7XDodD9913nx566CENGzbMYx9hYWGukCRJ6enp8vf3V3l5ue688842+zQ1NampqcntPU6fPq1+/frJz8+v3ccMAAB6jmEYOnv2rKKjo+Xvb/4Fm1cEpVOnTqmlpUURERFu7RERETpw4IDHfex2u8d6u93uev3UU08pICBADzzwgGkf/fv3d2sLCAhQ37593fq5WH5+vh577LHvPCYAAOD9jh49qhtvvNF0u1cEpa5QUVGhX//616qsrOzUKz15eXluV7Lq6+s1cOBAHT16VCEhIZ32PgAAoOs0NDQoJiZG11133SXrvCIohYeHy2KxqK6uzq29rq5OkZGRHveJjIy8ZP3OnTt14sQJDRw40LW9paVFS5cu1bp163T48GFFRka2mSx+4cIFnT592vR9g4KCFBQU1KY9JCSEoAQAgI/5rospXvGrt8DAQI0cOVJlZWWuNofDobKyMqWmpnrcJzU11a1ekkpLS1319913nz744APt27fP9YiOjtZDDz2kt956y9XHmTNnVFFR4erjnXfekcPhkNVq7ezDBAAAPsYrrihJUm5urmbPnq1Ro0YpOTlZ69atU2Njo+bMmSNJmjVrlgYMGKD8/HxJ0qJFi5SWlqY1a9ZoypQpKiws1N69e7Vx40ZJUr9+/dSvXz+397jmmmsUGRmpwYMHS5JuvfVWTZ48WfPmzVNBQYGam5u1YMECzZgxg1+8AQAA7wlK2dnZOnnypFauXCm73a6kpCRt377dNWG7pqbGbVb6mDFjtGnTJq1YsULLly/XoEGDVFxcrOHDh3fofV955RUtWLBAEydOlL+/v+666y4999xznXpsAADAN3nNOkq+qqGhQaGhoaqvr2eOEgAAPqK9n99eMUcJAADAGxGUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATBCUAAAATAT09AAAAIDvammRdu6UamulqChp3DjJYunpUXUerigBAIDLUlQkxcdLEyZI99zjfI6Pd7b3FgQlAADQYUVF0vTpUkKCZLNJZ886nxMSnO29JSz5GYZh9PQgfFlDQ4NCQ0NVX1+vkJCQnh4OAABdrqXFeeUoIUEqLpb8L7rs4nBImZlSdbV08KD3fg3X3s9vrigBAIAO2blTOnxYWr7cPSRJztd5edKhQ846X+dVQWnDhg2KjY1VcHCwrFardu/efcn6LVu2aMiQIQoODlZCQoK2bdvmtv3RRx/VkCFD1KdPH11//fVKT09XeXm5W01sbKz8/PzcHqtXr+70YwMAoLeorXU+Dx/ueXtre2udL/OaoLR582bl5uZq1apVqqysVGJiojIyMnTixAmP9bt27VJOTo7mzp2rqqoqZWZmKjMzU9XV1a6aW265RevXr9eHH36ov/3tb4qNjdWkSZN08uRJt74ef/xx1dbWuh4LFy7s0mMFAMCXRUU5ny/6yHXT2t5a58u8Zo6S1WrV6NGjtX79ekmSw+FQTEyMFi5cqGXLlrWpz87OVmNjo0pKSlxtKSkpSkpKUkFBgcf3aP0+8u2339bEiRMlOa8oLV68WIsXL76scTNHCQBwtWGOUjc7f/68KioqlJ6e7mrz9/dXenq6bDabx31sNptbvSRlZGSY1p8/f14bN25UaGioEhMT3batXr1a/fr102233aZnnnlGFy5cMB1rU1OTGhoa3B4AAFxNLBZpzRqppMQZii7+1VtmprP92We9NyR1hFcsOHnq1Cm1tLQoIiLCrT0iIkIHDhzwuI/dbvdYb7fb3dpKSko0Y8YMffnll4qKilJpaanCw8Nd2x944AHdfvvt6tu3r3bt2qW8vDzV1tZq7dq1Ht83Pz9fjz322OUcJgAAvUZWlvT669LSpdKYMd+0x8U527Oyem5snckrglJXmjBhgvbt26dTp07pv//7v3X33XervLxc/fv3lyTl5ua6akeMGKHAwEDdf//9ys/PV1BQUJv+8vLy3PZpaGhQTExM1x8IAABeJitLmjatd6/M7RVBKTw8XBaLRXV1dW7tdXV1ioyM9LhPZGRku+r79Omj+Ph4xcfHKyUlRYMGDdKLL76ovLw8j/1arVZduHBBhw8f1uDBg9tsDwoK8higAAC4Glks0vjxPT2KruMVc5QCAwM1cuRIlZWVudocDofKysqUmprqcZ/U1FS3ekkqLS01rb+436amJtPt+/btk7+/v+uKEwAAuHp5xRUlyfkV2OzZszVq1CglJydr3bp1amxs1Jw5cyRJs2bN0oABA5Sfny9JWrRokdLS0rRmzRpNmTJFhYWF2rt3rzZu3ChJamxs1C9/+UtNnTpVUVFROnXqlDZs2KAvvvhCP/nJTyQ5J4SXl5drwoQJuu6662Sz2bRkyRLde++9uv7663vmRAAAAK/hNUEpOztbJ0+e1MqVK2W325WUlKTt27e7JmzX1NTI/6LfH44ZM0abNm3SihUrtHz5cg0aNEjFxcUa/q9VriwWiw4cOKDf//73OnXqlPr166fRo0dr586dGjZsmCTn12iFhYV69NFH1dTUpLi4OC1ZssRtDhIAALh6ec06Sr6KdZQAAPA9PrWOEgAAgDciKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJggKAEAAJjwqqC0YcMGxcbGKjg4WFarVbt3775k/ZYtWzRkyBAFBwcrISFB27Ztc9v+6KOPasiQIerTp4+uv/56paenq7y83K3m9OnTmjlzpkJCQhQWFqa5c+fq3LlznX5sAADA93hNUNq8ebNyc3O1atUqVVZWKjExURkZGTpx4oTH+l27diknJ0dz585VVVWVMjMzlZmZqerqalfNLbfcovXr1+vDDz/U3/72N8XGxmrSpEk6efKkq2bmzJnav3+/SktLVVJSonfffVfz58/v8uMFAADez88wDKOnByFJVqtVo0eP1vr16yVJDodDMTExWrhwoZYtW9amPjs7W42NjSopKXG1paSkKCkpSQUFBR7fo6GhQaGhoXr77bc1ceJEffzxxxo6dKj27NmjUaNGSZK2b9+uO+64Q8eOHVN0dPR3jru1z/r6eoWEhFzOoQMAgG7W3s9vr7iidP78eVVUVCg9Pd3V5u/vr/T0dNlsNo/72Gw2t3pJysjIMK0/f/68Nm7cqNDQUCUmJrr6CAsLc4UkSUpPT5e/v3+br+gAAMDVJ6CnByBJp06dUktLiyIiItzaIyIidODAAY/72O12j/V2u92traSkRDNmzNCXX36pqKgolZaWKjw83NVH//793eoDAgLUt2/fNv20ampqUlNTk+t1Q0ND+w4SAAD4HK+4otSVJkyYoH379mnXrl2aPHmy7r77btN5T+2Rn5+v0NBQ1yMmJqYTRwsAALyJVwSl8PBwWSwW1dXVubXX1dUpMjLS4z6RkZHtqu/Tp4/i4+OVkpKiF198UQEBAXrxxRddfXw7NF24cEGnT582fd+8vDzV19e7HkePHu3QsQIAAN/hFUEpMDBQI0eOVFlZmavN4XCorKxMqampHvdJ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bGysgoODZbVatXv37kvWb9myRUOGDFFwcLASEhK0bds2t+1FRUWaNGmS+vXrJz8/P+3bt69NH+PHj5efn5/b42c/+1lnHhZw1crKkj77TNqxQ9q0yfl88CAhCYBv8YqgtHnzZuXm5mrVqlWqrKxUYmKiMjIydOLECY/1u3btUk5OjubOnauqqiplZmYqMzNT1RfNHm1sbNTYsWP11FNPXfK9582bp9raWtfj6aef7tRjA65mFos0fryUk+N85us2AL7GKxactFqtGj16tNavXy9JcjgciomJ0cKFC7Vs2bI29dnZ2WpsbFRJSYmrLSUlRUlJSSooKHCrPXz4sOLi4lRVVaWkpCS3bePHj1dSUpLWrVt32WNnwUkAAHyPzyw4ef78eVVUVCg9Pd3V5u/vr/T0dNlsNo/72Gw2t3pJysjIMK2/lFdeeUXh4eEaPny48vLy9OWXX16yvqmpSQ0NDW4PAADQO/X4ZO5Tp06ppaVFERERbu0RERE6cOCAx33sdrvHervd3qH3vueee3TTTTcpOjpaH3zwgR5++GF98sknKrrEjajy8/P12GOPdeh9AACAb+rxoNST5s+f7/pzQkKCoqKiNHHiRH3++ee6+eabPe6Tl5en3Nxc1+uGhgbFxMR0+VgBAED36/GgFB4eLovForq6Orf2uro6RUZGetwnMjKyQ/XtZbVaJUmfffaZaVAKCgpSUFDQFb0PAADwDT0+RykwMFAjR45UWVmZq83hcKisrEypqake90lNTXWrl6TS0lLT+vZqXUIginsrAAAAecEVJUnKzc3V7NmzNWrUKCUnJ2vdunVqbGzUnDlzJEmzZs3SgAEDlJ+fL0latGiR0tLStGbNGk2ZMkWFhYXau3evNm7c6Orz9OnTqqmp0fHjxyVJn3zyiSTn1ajIyEh9/vnn2rRpk+644w7169dPH3zwgZYsWaIf/OAHGjFiRDefAQAA4I28IihlZ2fr5MmTWrlypex2u5KSkrR9+3bXhO2amhr5+39z8WvMmDHatGmTVqxYoeXLl2vQoEEqLi7W8ItuV75161ZX0JKkGTNmSJJWrVqlRx99VIGBgXr77bddoSwmJkZ33XWXVqxY0U1HDQAAvJ1XrKPky1hHCQAA3+Mz6ygBAAB4K4ISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACAiYCeHgBwtWlpkXbulGprpagoadw4yWLp6VEBADzhihLQjYqKpPh4acIE6Z57nM/x8c52AID3ISgB3aSoSJo+XUpIkGw26exZ53NCgrOdsAQA3sfPMAyjpwfhyxoaGhQaGqr6+nqFhIT09HDgpVpanFeOEhKk4mLJ/6L/RXE4pMxMqbpaOniQr+EAoDu09/ObK0pAN9i5Uzp8WFq+3D0kSc7XeXnSoUPOOgCA9yAoAd2gttb5PHy45+2t7a11AADvQFACukFUlPO5utrz9tb21joAgHcgKAHdYNw4KTZWevJJ55ykizkcUn6+FBfnrAMAeA+CEtANLBZpzRqppMQ5cfviX71lZjrbn32WidwA4G1YcBLoJllZ0uuvS0uXSmPGfNMeF+dsz8rqubEBADwjKAHdKCtLmjaNlbkBwFcQlIBuZrFI48f39CgAAO3hNXOUNmzYoNjYWAUHB8tqtWr37t2XrN+yZYuGDBmi4OBgJSQkaNu2bW7bi4qKNGnSJPXr109+fn7at29fmz6+/vpr/fznP1e/fv30/e9/X3fddZfq6uo687AAAIAP84qgtHnzZuXm5mrVqlWqrKxUYmKiMjIydOLECY/1u3btUk5OjubOnauqqiplZmYqMzNT1Rf99rqxsVFjx47VU089Zfq+S5Ys0f/+7/9qy5Yt+utf/6rjx48ri4kiAADgX7ziFiZWq1WjR4/W+vXrJUkOh0MxMTFauHChli1b1qY+OztbjY2NKikpcbWlpKQoKSlJBQUFbrWHDx9WXFycqqqqlJSU5Gqvr6/XDTfcoE2bNmn69OmSpAMHDujWW2+VzWZTSkpKu8bOLUwAAPA9PnMLk/Pnz6uiokLp6emuNn9/f6Wnp8tms3ncx2azudVLUkZGhmm9JxUVFWpubnbrZ8iQIRo4cOAl+2lqalJDQ4PbAwAA9E49HpROnTqllpYWRUREuLVHRETIbrd73Mdut3eo3qyPwMBAhYWFdaif/Px8hYaGuh4xMTHtfk8AAOBbejwo+Zq8vDzV19e7HkePHu3pIQEAgC7S48sDhIeHy2KxtPm1WV1dnSIjIz3uExkZ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+5quOs8Oh0P33XefHnroIQ0bNqxrBu9DuuI8OxwOvfnmm7rllluUkZGh/v37y2q1qri4uMuOw9t11d/nMWPGaOvWrfriiy9kGIZ27NihTz/9VJMmTeqaA/Fyl3Oee6LP7kRQ+pdTp06ppaXFtRJ4q4iICNntdo/72O32S9a3Pnekz6tBV5zrb/v666/18MMPKycnx6du0NiZuuo8P/XUUwoICNADDzzQ+YP2QV1xnk+cOKFz585p9erVmjx5sv785z/rzjvvVFZWlv761792zYF4ua76+/z8889r6NChuvHGGxUYGKjJkydrw4YN+sEPftD5B+EDLuc890Sf3clrbmECdJbm5mbdfffdMgxDL7zwQk8Pp1epqKjQr3/9a1VWVsrPz6+nh9NrORwOSdK0adO0ZMkSSVJSUpJ27dqlgoICpaWl9eTwepXnn39e7733nrZu3aqbbrpJ7777rn7+858rOjq6zdUoXJ24ovQv4eHhslgsqqurc2uvq6tTZGSkx30iIyMvWd/63JE+rwZdca5btYakI0eOqLS09Kq9miR1zXneuXOnTpw4oYEDByogIEABAQE6cuSIli5dqtjY2C45Dm/XFec5PDxcAQEBGjp0qFvNrbfeetX+6q0rzvNXX32l5cuXa+3atfrxj3+sESNGaMGCBcrOztazzz7bNQfi5S7nPPdEn92JoPQvgYGBGjlypMrKylxtDodDZWVlSk1N9bhPamqqW70klZaWuurj4uIUGRnpVtPQ0KDy8nLTPq8GXXGupW9C0sGDB/X222+rX79+XXMAPqIrzvN9992nDz74QPv27XM9oqOj9dBDD+mtt97quoPxYl1xngMDAzV69Gh98sknbjWffvqpbrrppk4+At/QFee5ublZzc3NbjdclySLxeK6qne1uZzz3BN9dquenk3uTQoLC42goCDj5ZdfNj766CNj/vz5RlhYmGG32w3DMIz77rvPWLZsmav+73//uxEQEGA8++yzxscff2ysWrXK4/IAYWFhxhtvvGF88MEHxrRp01gewOj8c33+/Hlj6tSpxo033mjs27fPqK2tdT2ampp65Bi9QVf8nf42fvXWNee5qKjIuOaaa4yNGzcaBw8eNJ5//nnDYrEYO3fu7Pbj8xZdcZ7T0tKMYcOGGTt27DD+7//+z3jppZeM4OBg4ze/+U23H5+36Oh5bmpqMqqqqoyqqiojKirKePDBB42qqirj4MGD7e7TmxGUvuX55583Bg4caAQGBhrJycnGe++959qWlpZmzJ49263+tddeM2655RYjMDDQGDZsmPHmm2+6bXc4HMYjjzxiREREGEFBQcbEiRONTz75pDsOxet15rk+dOiQIcnjY8eOHd10RN6ps/9OfxtByakrzvOLL75oxMfHG8HBwUZiYqJRXFzc1Yfh9Tr7PNfW1ho//elPjejoaCM4ONgYPHiwsWbNGsPhcHTH4Xitjpxns39/09LS2t2nN/MzDMPooYtZAAAAXo05SgAAACYISgAAACYISgAAACYISgAAACYISgAAACYISgAAACYISgAAACYISgAAACYISgAAACYISgDQDs8995xmzZolPz+/y3oA8E3cwgQAvoNhGEpLS9Nf//pXQg9wleGKEoBe691339WPf/xjRUdHy8/PT8XFxR7r5syZoxUrVpj285e//EVpaWmEJOAqRFAC0Gs1NjYqMTFRGzZsMK1paWlRSUmJpk6dalrzP//zP5o1a1ZXDBGAlyMoAei1fvSjH+mJJ57QnXfeaVqza9cuXXPNNRo9erTH7V999ZW++OILDRo0qM22zz//XH5+fiopKdHEiRP1ve99T4MHD1Z5eXmnHQOAnkVQAnBV27p1q3784x/Lz89P5eXl+slPfqKnnnrKtf2NN97QtGnTPO77/vvvy8/PT2vXrtUjjzyi999/XwMHDtSyZcu6a/gAuhhBCcBV7Y033nB97fZv//ZvmjJlin73u9+5tr/22muaMWOGx33ff/99hYWFafPmzRo/frwGDRqkqVOn6uTJk90ydgBdj6AE4Kr18ccf6/jx45o4caIk6YYbbtD06dN17Ngx7dmzRydOnFBgYKCuv/56j/u///77mjZtmm644QZX26FDhxQfH98t4wfQ9QhKAK5aW7du1Q9/+EMFBwe72r7//e9r2rRpeuWVV/Tqq68qJyfHdP/3339fqampbm379u1TUlJSVw0ZQDcjKAG4apnNP5o5c6YKCwv15ptv6o477vC4b319vQ4fPqzbbrvNrZ2gBPQuAT09AADoKufOndNnn33men3o0CHt27dPffv2VXBwsPbu3autW7e22S8jI0MtLS0aPHiwrrnmGo99f/DBBwoICFBCQoKr7ciRI/rnP/9JUAJ6EYISgF5r7969mjBhgut1bm6uJGn27NkaN26ckpOTFR4e3ma/gIAA5eTk6L777jPt+/3339fgwYPdvrarqqpSWFiYYmNjO+8gAPQobmEC4Ko0depUjR07Vr/4xS96eigAvBhzlABclcaOHXvJidoAIHFFCQAAwBRXlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEz8f7FH1Q7tBl6rAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(1/np.sqrt(nList), sigmaList, 'bo', fillstyle = 'none')\n", "plt.xlabel(r'$1/\\sqrt{n}$')\n", "plt.ylabel(r'$\\sigma$ (std)')\n", "plt.axis((0, .11, 0, 0.04));" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.8" } }, "nbformat": 4, "nbformat_minor": 5 }